/**********************************************************************/
/**  Copyright (c) ECC labs. 2001-2002. All Rights Reserved.         **/
/**********************************************************************/

#ifndef __CBINFAMILY_H
#define __CBINFAMILY_H

#include "bincode.h"
#include <string.h>
#include <fstream>
#include <stdlib.h>

#define MAX_STRINGS 256
#define MAX_STR_LEN 256
#define MAX_FAM_MEMB 64

using namespace std;

class CBinFamily {
public:

	t_len s;
	CBinCode* C;
	CBinCode* D;

	struct t_code_family {
				int     k[MAX_FAM_MEMB],
						n[MAX_FAM_MEMB],
						sec,
						all ;
			};

	struct  t_conf_data {
		 //     long    num ;
				int     its_k ;
				int     its_d ;
				int     sum_k ;
				int     sum_d ;
		};

	t_res filter( char *filename) ;
	t_res conf_calc ( CBinCode *C, t_conf_data *rs) ;

	////////// Tensor product's sum dimention calc //////////////////
	t_len tp_dim ( t_conf_data *rs_C, t_conf_data *rs_D)  ;

	///////// Tensor product's sum distance upper bound calc ///////
	t_len upper_bound ( t_conf_data *rs_C, t_conf_data *rs_D) ;

	///////// Tensor products sum calculation //////////////////////
	 CBinCode& tp ();

	///////// Tensor products sum calculation //////////////////////
	CBinCode tpsum() ;

	/////// gets code nfo from a file //////
	CBinCode& code_init( char* ) ;

	/////////// sorts code's G matrix (increasing wights) ////////
	void sort_( CBinCode& ) ;
};


#endif
